package Chapter1.MaxSum;

public class Method5 {

    SumResult maxResult = new SumResult();  //最终结果
    SumResult middleResult = new SumResult();  //中间分段计算结果

    public SumResult execute(Double[] array){


        for(int index=0; index<array.length; index++){
            if(Double.compare(array[index], 0) <= 0){
                //当前值<=0

                /**
                 * 1.maxResult<=0
                 *   如果当前值大于maxResult,用当前值初始化 maxResult: maxResult.sum=array[index], maxResult.start=index, maxResult.end=index;
                 *
                 * 2.maxResult>0
                 *   2.1 middleResult<=0, 继续下一个比较；
                 *   2.2 middleResult>0
                 *     2.2.1 (middleResult + 当前值)<=0
                 *       //当期middle计算结束
                 *       if(maxResult.start == middleResult.start){
                 *          //保存maxResult结果
                 *          maxResult.end = middleResult.end;
                 *       }
                 *
                 *       middleResult.init(), 重新初始化，重新开始计算；
                 *     2.2.2 (middleResult + 当前值)>0，不做操作。
                 *   继续下一个比较。
                 */


            }else {
                //当前值>0
                /**
                 * 1. maxResult<=0
                 *    用当前值初始化 maxResult和 middleResult。
                 *    middleResult.sum=array[index], middleResult.start=index, middleResult.end=index;
                 *    maxResult=middleResult;
                 *
                 * 2. maxResult>0
                 *    2.1 middleResult.sum<=0,
                 *     用当前值初始化middleResult:  middleResult.sum=array[index], middleResult.start=index, middleResult.end=index;
                 *
                 *     if(middleResult.sum > maxResult.sum ){
                 *          maxResult = middleResult;
                 *      }
                 *
                 *    2.2 middleResult.sum>0:
                 *      //累加middle值
                 *      middleResult.sum += array[index];
                 *      middleResult.end = index;
                 *
                 *
                 *      if(maxResult.start == middleResult.start){
                 *          //maxResult就是当期段，更新maxResult
                 *          maxResult.sum = middleResult.sum;
                 *          maxResult.end = middleResult.end;
                 *      }else if(middleResult.sum > maxResult.sum){{
                 *          //maxResult不是当前端，当前端值更大
                 *          maxResult = middleResult;
                 *      }
                 *
                 *
                 */
            }
        }

        return maxResult;
    }


}
